<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的定义方式</title>
</head>
<body>
    
</body>
<script>
    /*
        再JS中，绝大多数的类型都是对象类型的 包括字符串 Map Set 数组  
            只是大多数的时候我们回直接使用字面量的形式来定义或者创建对象而已
    */
    let str = new String('hhhh')
    console.log(str)  //  String {"hhhh"}

    /*
        定义函数的方式
    */
    // 使用对象的形式定义
    let fun = new Function('title','console.log(title)')
    fun('jimmy')   // jimmy

    // 用字面量的形式来定义函数
    function getname(title){
        console.log(title)
    }
    getname('hello')  // hello

    // 使用变量的方式来接收函数
    let name = function(obj){
        console.log(obj)
    }
    name('xuexue')  //xuexue  

    /*
        再对象中我们也经常回用到函数来配合
    */
    let obj = {
        name:null,
        /*
            以下在对象中的两种方法的定义  推荐使用第二种直接定义的方法，更加符合ES6
        */
        sstname:function(tt){
            this.name = tt
        },
        // 推荐直接使用这种方法
        setname(name){
            this.name = name
            return this  // 要想实现类似于jQuery这样子的链式操作  我们只需要在每个function中将this给return出去
        },
        getname(){
            console.log(this.name)
        }
    }
    obj.setname('jimmy').getname()  //jimmy
</script>
</html>